package com.aaa.stock.service.purch.impl;

import cn.hutool.core.util.RandomUtil;
import com.aaa.entity.Purchase;
import com.aaa.entity.PurchaseItem;
import com.aaa.entity.User;
import com.aaa.stock.dao.purch.PurchaseDao;
import com.aaa.stock.dao.purch.PurchaseItemDao;
import com.aaa.stock.feign.UserFeign;
import com.aaa.stock.service.purch.PurchaseItemService;
import com.aaa.stock.util.JsonUtil;
import com.aaa.stock.vo.PurchaseItemVo;
import com.aaa.utils.JwtUtil;
import com.aaa.utils.WebUtil;
import com.aaa.vo.Result;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;

@Service
public class PurchaseItemServiceImpl extends ServiceImpl<PurchaseItemDao,PurchaseItem> implements PurchaseItemService {
    @Resource
    private PurchaseItemDao purchaseItemDao;

    @Autowired
    private UserFeign userFeign;

    @Resource
    private PurchaseDao purchaseDao;


    @Override
    public Result<IPage<PurchaseItem>> purItemAll(List<PurchaseItem> purchaseItems) {
        PurchaseItem purchaseItem1 = purchaseItems.get(0);
        QueryWrapper<PurchaseItem> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("purchase_id",purchaseItem1.getPurchaseId());

        Page<PurchaseItem> purchaseItemPage = new Page<>(1, 5);
        Page<PurchaseItem> purchaseItemPage1 =purchaseItemDao.selectPage(purchaseItemPage, queryWrapper);
        return  new Result<>(2000,"查询成功",purchaseItemPage1);
    }
//暂存
    @Override
    public Result<String> momAdd(Map<String, Object> map) {
        HttpServletRequest request= WebUtil.getRequest();
        String token=request.getHeader("token");
        Map<String,Object>tokenData=JwtUtil.getTokenChaim(token);
        String phone=(String)tokenData.get("username");
        User user=userFeign.getByUsername(phone);
        AtomicInteger atomicInteger=new AtomicInteger();

        JsonUtil jsonUtil=new JsonUtil();
        System.out.println("==================================================="+map);
        //添加
        Purchase purchase=jsonUtil.mapToObject(map,Purchase.class,"Purchase");
        //状态
        purchase.setStatus("1");
        //添加tock获取到的name
        purchase.setApplyUserName(user.getUserName());
        //添加从openfeign id
        purchase.setApplyUserId(user.getUserId());
        //添加当前时间
        purchase.setCreateTime(LocalDateTime.now());

        int insert=purchaseDao.insert(purchase);
        if (insert==1){
            atomicInteger.getAndIncrement();
        }

        List<PurchaseItem> purchaseItems=jsonUtil.mapToList(map,PurchaseItem.class,"PurchaseItem");
        System.out.println("==================================================="+purchaseItems);
        purchaseItems.forEach(itme->{
            String s= RandomUtil.randomNumbers(19);
            itme.setItemId(s);
            itme.setPurchaseId(purchase.getPurchaseId());
            int insert1=purchaseItemDao.insert(itme);
            if (insert1==1){
                atomicInteger.getAndIncrement();
            }
        });
        return new Result(2000,"暂存成功",atomicInteger);
    }

    @Override
    public Result<String> momAddSub(Map<String, Object> map) {
        HttpServletRequest request = WebUtil.getRequest();
        String token = request.getHeader("token");
        Map<String, Object> tokenData = JwtUtil.getTokenChaim(token);
        //获取 taken 用户名
        String phone = (String)tokenData.get("username");
        User user = userFeign.getByUsername(phone);
        // 原子类
        AtomicInteger atomicInteger = new AtomicInteger();
        //自己新建一个工具类
        JsonUtil jsonUtil = new JsonUtil();
        //  添加采购单
        Purchase purchase1 = jsonUtil.mapToObject(map, Purchase.class, "Purchase");
        // 目前是暂存状态 == 未提交 ==1
        purchase1.setStatus("2");
        // 添加从 token获取的 phone 在openfeign  name
        purchase1.setApplyUserName(user.getUserName());
        // 添加 从  在openfeign  id
        purchase1.setApplyUserId(user.getUserId());
        // 添加当前时间
        purchase1.setCreateTime(LocalDateTime.now());

        int insert = purchaseDao.insert(purchase1);
        if (insert==1){
            atomicInteger.getAndIncrement();
        }

        // 添加详情采购单
        List<PurchaseItem> purchaseItemlist = jsonUtil.mapToList(map, PurchaseItem.class, "PurchaseItem");
        purchaseItemlist.forEach(itme->{
            // 生成详情流水id
            String s = RandomUtil.randomNumbers(19);
            itme.setItemId(s);
            // 添加 采购单据id
            itme.setPurchaseId(purchase1.getPurchaseId());

            int insert1 = purchaseItemDao.insert(itme);
            if (insert1==1){
                atomicInteger.getAndIncrement();
            }
        });


        return new Result(2000,"提交成功",atomicInteger);

    }

    @Override
    public Result<IPage<PurchaseItem>> proItemAll(PurchaseItemVo purchaseItemVo) {
        Page<PurchaseItem> purchaseItemPage = new Page<>(purchaseItemVo.getCurrent(), purchaseItemVo.getSize());

        QueryWrapper<PurchaseItem> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("purchase_id",purchaseItemVo.getPurchaseId());
        IPage<PurchaseItem> purchaseItemPage1 = purchaseItemDao.selectPage(purchaseItemPage, queryWrapper);

        return new Result<>(2000,"查询成功",purchaseItemPage1);
    }
}
